package com.zwj.interview.完全二叉树;


/**
 * @Author: Zwj
 * @Date: 2022/2/27 16:13
 */
public class 是否是合法的BST {

    public boolean isValidBST(TreeNode root) {
        return helper(root, null, null);
    }


    //限制一个范围，root的左子树的最大值小于root.val,右子树的值大于root.val
    public boolean helper(TreeNode node, Integer lower, Integer upper) {
        if (node == null) {
            return true;
        }
        int val = node.val;
        //前面两种情况好理解，也是basecase
        if (lower != null && val <= lower) {
            return false;
        }
        if (upper != null && val >= upper) {
            return false;
        }
        //对于左节点，节点的最大值就是该节点的值
        if (!helper(node.left, lower, val)) {
            return false;
        }
        //对于右节点，该节点的值就是最小值
        if (!helper(node.right, val, upper)) {
            return false;
        }
        return true;
    }




}